home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / db_datadict.php < prev    next >
PHP Script  |  2005-03-05  |  10KB  |  317 lines

  1. <?php
  2. /* $Id: db_datadict.php,v 2.16 2005/03/05 23:19:35 lem9 Exp $ */
  3.  
  4.  
  5. /**
  6.  * Gets the variables sent or posted to this script, then displays headers
  7.  */
  8. if (!isset($selected_tbl)) {
  9.     require_once('./libraries/grab_globals.lib.php');
  10.     require_once('./header.inc.php');
  11. }
  12.  
  13.  
  14. /**
  15.  * Gets the relations settings
  16.  */
  17. require_once('./libraries/relation.lib.php');
  18. require_once('./libraries/transformations.lib.php');
  19.  
  20. $cfgRelation  = PMA_getRelationsParam();
  21.  
  22. /**
  23.  * Check parameters
  24.  */
  25. PMA_checkParameters(array('db'));
  26.  
  27. /**
  28.  * Defines the url to return to in case of error in a sql statement
  29.  */
  30. if (isset($table)) {
  31.     $err_url = 'tbl_properties.php?' . PMA_generate_common_url($db, $table);
  32. } else {
  33.     $err_url = 'db_details.php?' . PMA_generate_common_url($db);
  34. }
  35.  
  36. if ($cfgRelation['commwork']) {
  37.     $comment = PMA_getComments($db);
  38.  
  39.     /**
  40.      * Displays DB comment
  41.      */
  42.     if (is_array($comment)) {
  43.         ?>
  44.     <!-- DB comment -->
  45.     <p><?php echo $strDBComment; ?> <i>
  46.         <?php echo htmlspecialchars(implode(' ', $comment)) . "\n"; ?>
  47.     </i></p>
  48.         <?php
  49.     } // end if
  50. }
  51.  
  52. /**
  53.  * Selects the database and gets tables names
  54.  */
  55. PMA_DBI_select_db($db);
  56. $rowset = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', NULL, PMA_DBI_QUERY_STORE);
  57.  
  58. $count  = 0;
  59. while ($row = PMA_DBI_fetch_assoc($rowset)) {
  60.     $myfieldname = 'Tables_in_' . htmlspecialchars($db);
  61.     $table        = $row[$myfieldname];
  62.     if ($cfgRelation['commwork'] || PMA_MYSQL_INT_VERSION >= 40100) {
  63.         $comments = PMA_getComments($db, $table);
  64.     }
  65.  
  66.     if ($count != 0) {
  67.         echo '<div style="page-break-before: always;">' . "\n";
  68.     } else {
  69.         echo '<div>' . "\n";
  70.     }
  71.  
  72.     echo '<h2>' . $table . '</h2>' . "\n";
  73.  
  74.     /**
  75.      * Gets table informations
  76.      */
  77.     // The 'show table' statement works correct since 3.23.03
  78.     $result       = PMA_DBI_query('SHOW TABLE STATUS LIKE \'' . PMA_sqlAddslashes($table, TRUE) . '\'', NULL, PMA_DBI_QUERY_STORE);
  79.     $showtable    = PMA_DBI_fetch_assoc($result);
  80.     $num_rows     = (isset($showtable['Rows']) ? $showtable['Rows'] : 0);
  81.     $show_comment = (isset($showtable['Comment']) ? $showtable['Comment'] : '');
  82.     PMA_DBI_free_result($result);
  83.  
  84.  
  85.     /**
  86.      * Gets table keys and retains them
  87.      */
  88.  
  89.     PMA_DBI_select_db($db);
  90.     $result       = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  91.     $primary      = '';
  92.     $indexes      = array();
  93.     $lastIndex    = '';
  94.     $indexes_info = array();
  95.     $indexes_data = array();
  96.     $pk_array     = array(); // will be use to emphasis prim. keys in the table
  97.                              // view
  98.     while ($row = PMA_DBI_fetch_assoc($result)) {
  99.         // Backups the list of primary keys
  100.         if ($row['Key_name'] == 'PRIMARY') {
  101.             $primary   .= $row['Column_name'] . ', ';
  102.             $pk_array[$row['Column_name']] = 1;
  103.         }
  104.         // Retains keys informations
  105.         if ($row['Key_name'] != $lastIndex ){
  106.             $indexes[] = $row['Key_name'];
  107.             $lastIndex = $row['Key_name'];
  108.         }
  109.         $indexes_info[$row['Key_name']]['Sequences'][]     = $row['Seq_in_index'];
  110.         $indexes_info[$row['Key_name']]['Non_unique']      = $row['Non_unique'];
  111.         if (isset($row['Cardinality'])) {
  112.             $indexes_info[$row['Key_name']]['Cardinality'] = $row['Cardinality'];
  113.         }
  114.         // I don't know what does following column mean....
  115.         // $indexes_info[$row['Key_name']]['Packed']          = $row['Packed'];
  116.  
  117.         $indexes_info[$row['Key_name']]['Comment']     = $row['Comment'];
  118.  
  119.         $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Column_name']  = $row['Column_name'];
  120.         if (isset($row['Sub_part'])) {
  121.             $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Sub_part'] = $row['Sub_part'];
  122.         }
  123.  
  124.     } // end while
  125.     if ($result) {
  126.         PMA_DBI_free_result($result);
  127.     }
  128.  
  129.  
  130.     /**
  131.      * Gets fields properties
  132.      */
  133.     $result      = PMA_DBI_query('SHOW FIELDS FROM ' . PMA_backquote($table) . ';', NULL, PMA_DBI_QUERY_STORE);
  134.     $fields_cnt  = PMA_DBI_num_rows($result);
  135.     // Check if we can use Relations (Mike Beck)
  136.     if (!empty($cfgRelation['relation'])) {
  137.         // Find which tables are related with the current one and write it in
  138.         // an array
  139.         $res_rel = PMA_getForeigners($db, $table);
  140.  
  141.         if (count($res_rel) > 0) {
  142.             $have_rel = TRUE;
  143.         } else {
  144.             $have_rel = FALSE;
  145.         }
  146.     }
  147.     else {
  148.         $have_rel = FALSE;
  149.     } // end if
  150.  
  151.  
  152.     /**
  153.      * Displays the comments of the table if MySQL >= 3.23
  154.      */
  155.     if (!empty($show_comment)) {
  156.         echo $strTableComments . ': ' . $show_comment . '<br /><br />';
  157.     }
  158.  
  159.     /**
  160.      * Displays the table structure
  161.      */
  162.     ?>
  163.  
  164. <!-- TABLE INFORMATIONS -->
  165. <table width="100%" style="border: 1px solid black; border-collapse: collapse; background-color: white;">
  166. <tr>
  167.     <th width="50"><?php echo $strField; ?></th>
  168.     <th width="80"><?php echo $strType; ?></th>
  169.     <!--<th width="50"><?php echo $strAttr; ?></th>-->
  170.     <th width="40"><?php echo $strNull; ?></th>
  171.     <th width="70"><?php echo $strDefault; ?></th>
  172.     <!--<th width="50"><?php echo $strExtra; ?></th>-->
  173.     <?php
  174.     echo "\n";
  175.     if ($have_rel) {
  176.         echo '    <th>' . $strLinksTo . '</th>' . "\n";
  177.     }
  178.     if ($cfgRelation['commwork'] || PMA_MYSQL_INT_VERSION >= 40100) {
  179.         echo '    <th>' . $strComments . '</th>' . "\n";
  180.     }
  181.     if ($cfgRelation['mimework']) {
  182.         echo '    <th>MIME</th>' . "\n";
  183.     }
  184.     ?>
  185. </tr>
  186.  
  187.     <?php
  188.     $i = 0;
  189.     while ($row = PMA_DBI_fetch_assoc($result)) {
  190.         $bgcolor = ($i % 2) ?$cfg['BgcolorOne'] : $cfg['BgcolorTwo'];
  191.         $i++;
  192.  
  193.         $type             = $row['Type'];
  194.         // reformat mysql query output - staybyte - 9. June 2001
  195.         // loic1: set or enum types: slashes single quotes inside options
  196.         if (preg_match('@^(set|enum)\((.+)\)$@i', $type, $tmp)) {
  197.             $tmp[2]       = substr(preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1);
  198.             $type         = $tmp[1] . '(' . str_replace(',', ', ', $tmp[2]) . ')';
  199.             $type_nowrap  = '';
  200.  
  201.             $binary       = 0;
  202.             $unsigned     = 0;
  203.             $zerofill     = 0;
  204.         } else {
  205.             $binary       = stristr($row['Type'], 'binary');
  206.             $unsigned     = stristr($row['Type'], 'unsigned');
  207.             $zerofill     = stristr($row['Type'], 'zerofill');
  208.             $type_nowrap  = ' nowrap="nowrap"';
  209.             $type         = preg_replace('@BINARY@i', '', $type);
  210.             $type         = preg_replace('@ZEROFILL@i', '', $type);
  211.             $type         = preg_replace('@UNSIGNED@i', '', $type);
  212.             if (empty($type)) {
  213.                 $type     = ' ';
  214.             }
  215.         }
  216.         $strAttribute     = ' ';
  217.         if ($binary) {
  218.             $strAttribute = 'BINARY';
  219.         }
  220.         if ($unsigned) {
  221.             $strAttribute = 'UNSIGNED';
  222.         }
  223.         if ($zerofill) {
  224.             $strAttribute = 'UNSIGNED ZEROFILL';
  225.         }
  226.         if (!isset($row['Default'])) {
  227.             if ($row['Null'] != '') {
  228.                 $row['Default'] = '<i>NULL</i>';
  229.             }
  230.         } else {
  231.             $row['Default'] = htmlspecialchars($row['Default']);
  232.         }
  233.         $field_name = htmlspecialchars($row['Field']);
  234.         echo "\n";
  235.         ?>
  236. <tr>
  237.     <td width=50 class='print' nowrap="nowrap">
  238.         <?php
  239.         echo "\n";
  240.         if (isset($pk_array[$row['Field']])) {
  241.             echo '    <u>' . $field_name . '</u> ' . "\n";
  242.         } else {
  243.             echo '    ' . $field_name . ' ' . "\n";
  244.         }
  245.         ?>
  246.     </td>
  247.     <td width="80" class="print"<?php echo $type_nowrap; ?>><?php echo $type; ?><bdo dir="ltr"></bdo></td>
  248.     <!--<td width="50" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap"><?php echo $strAttribute; ?></td>-->
  249.     <td width="40" class="print"><?php echo (($row['Null'] == '') ? $strNo : $strYes); ?> </td>
  250.     <td width="70" class="print" nowrap="nowrap"><?php if (isset($row['Default'])) echo $row['Default']; ?> </td>
  251.     <!--<td width="50" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap"><?php echo $row['Extra']; ?> </td>-->
  252.         <?php
  253.         echo "\n";
  254.         if ($have_rel) {
  255.             echo '    <td class="print">';
  256.             if (isset($res_rel[$field_name])) {
  257.                 echo htmlspecialchars($res_rel[$field_name]['foreign_table'] . ' -> ' . $res_rel[$field_name]['foreign_field']);
  258.             }
  259.             echo ' </td>' . "\n";
  260.         }
  261.         if ($cfgRelation['commwork'] || PMA_MYSQL_INT_VERSION >= 40100) {
  262.             echo '    <td class="print">';
  263.             if (isset($comments[$field_name])) {
  264.                 echo htmlspecialchars($comments[$field_name]);
  265.             }
  266.             echo ' </td>' . "\n";
  267.         }
  268.         if ($cfgRelation['mimework']) {
  269.             $mime_map = PMA_getMIME($db, $table, true);
  270.  
  271.             echo '    <td class="print">';
  272.             if (isset($mime_map[$field_name])) {
  273.                 echo htmlspecialchars(str_replace('_', '/', $mime_map[$field_name]['mimetype']));
  274.             }
  275.             echo ' </td>' . "\n";
  276.         }
  277.         ?>
  278. </tr>
  279.         <?php
  280.     } // end while
  281.     PMA_DBI_free_result($result);
  282.  
  283.     echo "\n";
  284.     ?>
  285. </table>
  286.  
  287.     <?php
  288.     echo '</div>' . "\n";
  289.  
  290.     $count++;
  291. } //ends main while
  292.  
  293.  
  294. /**
  295.  * Displays the footer
  296.  */
  297. echo "\n";
  298. ?>
  299. <script type="text/javascript" language="javascript1.2">
  300. <!--
  301. function printPage()
  302. {
  303.     document.getElementById('print').style.visibility = 'hidden';
  304.     // Do print the page
  305.     if (typeof(window.print) != 'undefined') {
  306.         window.print();
  307.     }
  308.     document.getElementById('print').style.visibility = '';
  309. }
  310. //-->
  311. </script>
  312. <?php
  313. echo '<br /><br /> <input type="button" style="width: 100px; height: 25px;" id="print" value="' . $strPrint . '" onclick="printPage()">' . "\n";
  314.  
  315. require_once('./footer.inc.php');
  316. ?>
  317.